package com.ls.pattern.behavior.template_method;

//豆浆
public abstract class SoyaMilk {

    //模板方法 make 做成final 不让子类去覆盖
    final void make() {
        select();
        if (customerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();
    }

    void select() {
        System.out.println("第一步:选择好豆子");
    }

    //添加配料
    abstract void addCondiments();

    //浸泡
    void soak() {
        System.out.println("第三步:浸泡");
    }

    void beat() {
        System.out.println("第四步:打豆浆");
    }


    //钩子方法,决定是否需要添加配料
    boolean customerWantCondiments() {
        return true;
    }


}
